package com.wgh.product.api.client;

import com.wgh.common.vo.Result;
import com.wgh.product.dto.ProductSkuAttributeDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * SKU属性关联服务客户端
 * 用于其他服务调用SKU属性关联服务的API
 */
@FeignClient(name = "shop-product-service", path = "/api/product-sku-attribute")
public interface ProductSkuAttributeClient {

    /**
     * 根据SKU ID查询属性关联列表
     */
    @GetMapping("/sku/{skuId}")
    Result<List<ProductSkuAttributeDTO>> getSkuAttributesBySkuId(@PathVariable Long skuId);

    /**
     * 根据SKU ID列表查询属性关联列表
     */
    @GetMapping("/sku/batch")
    Result<List<ProductSkuAttributeDTO>> getSkuAttributesBySkuIds(@RequestParam List<Long> skuIds);

    /**
     * 根据属性ID查询SKU属性关联
     */
    @GetMapping("/attribute/{attributeId}")
    Result<List<ProductSkuAttributeDTO>> getSkuAttributesByAttributeId(@PathVariable Long attributeId);

    /**
     * 根据属性值ID查询SKU属性关联
     */
    @GetMapping("/attribute-value/{attributeValueId}")
    Result<List<ProductSkuAttributeDTO>> getSkuAttributesByAttributeValueId(@PathVariable Long attributeValueId);

    /**
     * 批量新增SKU属性关联
     */
    @PostMapping("/batch")
    Result<Boolean> batchAddSkuAttributes(@RequestBody List<ProductSkuAttributeDTO> skuAttributeDTOs);

    /**
     * 根据SKU ID删除属性关联
     */
    @DeleteMapping("/sku/{skuId}")
    Result<Boolean> deleteSkuAttributesBySkuId(@PathVariable Long skuId);

    /**
     * 根据SKU ID列表批量删除属性关联
     */
    @DeleteMapping("/sku/batch")
    Result<Boolean> batchDeleteSkuAttributesBySkuIds(@RequestParam List<Long> skuIds);

    /**
     * 根据属性ID删除SKU属性关联
     */
    @DeleteMapping("/attribute/{attributeId}")
    Result<Boolean> deleteSkuAttributesByAttributeId(@PathVariable Long attributeId);

    /**
     * 根据商品ID查询SKU属性关联
     */
    @GetMapping("/product/{productId}")
    Result<List<ProductSkuAttributeDTO>> getSkuAttributesByProductId(@PathVariable Long productId);

    /**
     * 根据ID获取SKU属性关联详情
     */
    @GetMapping("/{id}")
    Result<ProductSkuAttributeDTO> getSkuAttributeById(@PathVariable Long id);

    /**
     * 批量查询SKU属性关联
     */
    @GetMapping("/batch")
    Result<List<ProductSkuAttributeDTO>> getSkuAttributesByIds(@RequestParam List<Long> ids);
}